//package com.xiao.message.rabbitmq.handler;
//
//import com.fasterxml.jackson.databind.ObjectMapper;
//import com.rabbitmq.client.Channel;
//import com.xiao.message.service.SmsDispatcherService;
//import com.xiao.message.service.dto.SmsCaptchaDTO;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.amqp.core.Message;
//import org.springframework.amqp.rabbit.annotation.RabbitHandler;
//import org.springframework.amqp.rabbit.annotation.RabbitListener;
//import org.springframework.data.redis.core.StringRedisTemplate;
//import org.springframework.data.redis.core.ValueOperations;
//import org.springframework.messaging.handler.annotation.Header;
//import org.springframework.stereotype.Component;
//
//import java.io.IOException;
//import java.util.concurrent.TimeUnit;
//
///**
// * 订单队列处理器
// * 短信发送 消息队列
// * @author fanghong
// */
//@Slf4j
//@Component
//@RabbitListener(queues = "UMS_SMS_QUEUE")
//public class CaptchaSmsQueueHandler {
//
//	private SmsDispatcherService smsDispatcherService;
//	private StringRedisTemplate stringRedisTemplate;
//	CaptchaSmsQueueHandler(SmsDispatcherService smsDispatcherService, StringRedisTemplate stringRedisTemplate) {
//		this.smsDispatcherService = smsDispatcherService;
//		this.stringRedisTemplate = stringRedisTemplate;
//	}
//
//	@RabbitHandler
//	public void directHandlerManualAck(SmsCaptchaDTO smsCaptchaDTO, Message message, Channel channel,
//									   @Header(name = "amqp_deliveryTag") long deliveryTag,
//									   @Header(name = "spring_returned_message_correlation") String id) {
//
//		try {
//			ObjectMapper objectMapper = new ObjectMapper();
//			boolean result = smsDispatcherService.sendCaptchaMsg(smsCaptchaDTO);
//			log.info(String.format("短信验证码队列消费内容为: %s", objectMapper.writeValueAsString(smsCaptchaDTO)));
//			if (result) {
//				// 通知 MQ 消息已被成功消费,可以ACK了
//				channel.basicAck(deliveryTag, false);
//				ValueOperations ops = stringRedisTemplate.opsForValue();
//				ops.set(String.format("message:sms:captcha:%s", id), smsCaptchaDTO.getCode(),
//						10 , TimeUnit.MINUTES);
//			} else {
//				channel.basicReject(deliveryTag, false);
//			}
//		} catch (Exception e) {
//			try {
//				//失败,丢弃消息丢弃消息
//				channel.basicReject(deliveryTag, false);
//			} catch (IOException e1) {
//				log.error("短信验证码丢弃消息异常 {}", e1);
//			}
//			log.error("短信验证码队列消息处理异常 {}", e);
//		}
//	}
//}
